package bombita.menu.menuPrincipal;

import java.io.File;

import bombita.menu.ControladorMenu;
import bombita.menu.Menu;
import bombita.menu.selectorNivel.SelectorNivel;
import bombita.modelo.Juego;
import bombita.vista.Titiritero.VentanaPrincipal;

public class MenuPrincipal implements Menu
{
	private static final int indexCount = 3;
	private static final int indexSalida = indexCount - 1;
	private int index;
	private boolean seleccionado;
	private ControladorMenu controlador;
	private VistaMenuPrincipal vista;
	
	public MenuPrincipal()
	{
		vista = new VistaMenuPrincipal();
		index = 0;
		seleccionado = false;
	}
	
	private void iniciarJuego()
	{
		new SelectorNivel().activar();
	}
	
	private void cargarJuego()
	{
		new Juego(new File("salvado.xml"));
	}
	
	private void salir()
	{
		System.exit(0);
	}

	private void activarSeleccion()
	{
		VentanaPrincipal.instance().controlador().removerKeyPressObservador(controlador);
		switch (index) {
		case 0:
			this.iniciarJuego();
			break;
		case 1:
			this.cargarJuego();
			break;
		case 2:
			this.salir();
			break;
		}
		vista = new VistaMenuPrincipal();
		seleccionado = false;
		index = 0;
		VentanaPrincipal.instance().controlador().agregarKeyPressObservador(controlador);
	}
	
	@Override
	public synchronized void seleccionar()
	{
		seleccionado = true;
		this.notifyAll();
	}

	@Override
	public void anterior()
	{
		index += 1;
		if (index >= indexCount) {
			index -= indexCount;
		}
		vista.moverIndicador(index);
	}

	@Override
	public void siguiente()
	{
		index -= 1;
		if (index < 0) {
			index += indexCount;
		}
		vista.moverIndicador(index);
	}
	
	@Override
	public void atras()
	{
		// activa el ultimo item del menu, es siempre salida
		index = indexSalida;
		this.seleccionar();
	}

	public synchronized void activar()
	{
		while (true) {
			controlador = new ControladorMenu(this);
			VentanaPrincipal.instance().controlador().agregarKeyPressObservador(controlador);
			while (!seleccionado) {
				try {
					this.wait();
				} catch (InterruptedException e) {}
			}
			this.activarSeleccion();
			VentanaPrincipal.instance().controlador().removerKeyPressObservador(controlador);
		}
	}
}
